#include <iostream>
using namespace std;
/*捕捉异常*/
void test()
{
    try
    {
        /* code */
        int *num = new int[9999999999];
        /*有异常直接跳出，不会执行异常后面的程序*/
        cout << "11111\n";
    }
    // catch (const std::exception &e)
    // {
    //     std::cerr << e.what() << '\n';
    // }
    catch (...) /*捕捉任意异常*/
    {
        cout << "内存不够\n";
    }
    /*如果异常不被处理，程序就终止*/
}
/*
    主动抛异常
    语法：
        throw(int 123):整形
        throw(string)"123":字符串

*/
int myDivide(int val1, int val2)
{
    if (val2 == 0)
    {
        // throw "除数不能为0";
        throw 666;
    }
    return val1 / val2;
}
#if 0
/*异常声明case:1*/
/*可能会抛出任何异常*/
int func1()
{
    return 0;
}
#endif
/*可能有异常*/
int func1() noexcept(false)
{
    return 0;
}
#if 0
/*异常声明case:2*/
/*不抛出任何异常*/
int func2() throw()
{
    return 0;
}
#endif
/*无异常*/
int func2() noexcept /*=noexcept(true)*/
{
    return 0;
}

/*异常声明case:3*/
/*只能抛出int，double类型的异常*/
int func3() throw(int, double)
{
    return 0;
}
int main()
{
    // test();

    try
    {
        /*主动抛出异常*/
        myDivide(100, 0);
    }
    catch (const char *str)
    {
        cout << "此函数主动抛出异常:" << str << endl;
    }
    catch (int code)
    {
        cout << "此函数主动抛出异常:" << code << endl;
    }
    cout << "hello world\n";
    return 0;
}